﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class ModelDetail : System.Web.UI.Page
{
    GenesiServices svclayer = new GenesiServices();
    List<Associato> Associati = new List<Associato>();
    protected void Page_Load(object sender, EventArgs e)
    {

        if (!IsPostBack && !string.IsNullOrEmpty(Request["t"]))
        {
            Session["associatiDettaglio"] = null;
            BindFornitori();
            BindArticoli();
            BindDispo();
            BindModello();
        }
        else
        {
            if (Session["associatiDettaglio"] != null) Associati = (List<Associato>)Session["associatiDettaglio"];
        }

    }
    void BindFornitori()
    {
        var L = svclayer.GetFornitoriList();
        L.Insert(0, new GenesiModel.Fornitori());
        ddFornitori.DataSource = L;
        ddFornitori.DataBind();
    }

    void BindArticoli()
    {
        int sel = string.IsNullOrEmpty(ddFornitori.SelectedItem.Value) ? 0 : int.Parse(ddFornitori.SelectedItem.Value);
        var L = svclayer.GetArticoliList(sel);
        L.Insert(0, new GenesiModel.Articoli());
        ddArticoli.DataSource = L;
        ddArticoli.DataBind();
    }
    void BindDispo()
    {
        var oList = svclayer.CercaArticoli(ddFornitori.SelectedItem.Value, ddArticoli.SelectedItem.Value);
        dispo.DataSource = oList.Select(a => new { a.id, a.IdFornitore, a.CodArt, a.descrizione, a.Iva, a.PrezzoUnitario, DescUnitaMisura = a.UnitaMisura1.Descrizione }).ToList();
        dispo.DataBind();
    }
    protected void btnFiltra_Click(object sender, EventArgs e)
    {
        BindDispo();
    }

    void BindModello()
    {
        int idtestata = 0;
        int.TryParse(Request["t"], out idtestata);
        if (idtestata > 0)
        {
            GenesiModel.TestataModelli modello = svclayer.GetModello(idtestata, 1);
            if (modello == null) return;
            nome.Text = modello.Nome;
            descrizione.Text = modello.Descrizione;

            foreach (GenesiModel.DettaglioModello item in modello.DettaglioModello)
            {
                Associati.Add(new Associato { art = item.Articoli, Qta = item.Qta.Value });
            }

            gvAssociati.DataSource = Associati.Select(a => new
            {
                id = a.art.id,
                CodArt = a.art.CodArt,
                descrizione = a.art.descrizione,
                PrezzoUnitario = a.art.PrezzoUnitario,
                DescUnitaMisura = a.art.UnitaMisura1.Descrizione,
                Iva = a.art.Iva,
                Qta = a.Qta
            }).ToList();
            gvAssociati.DataBind();
            Session["associatiDettaglio"] = Associati;
        }
    }

    protected void SalvaModello(object sender, EventArgs e)
    {
        int idtestata = 0;
        int.TryParse(Request["t"], out idtestata);
        if (idtestata > 0)
        {
            GenesiModel.TestataModelli tm = new GenesiModel.TestataModelli() { id = idtestata, Nome = nome.Text, Descrizione = descrizione.Text };
            svclayer.UpdateModello(tm, Associati);
        }
    }

    protected void ConvertiModello(object sender, EventArgs e)
    {
        int idtestata = 0;
        int.TryParse(Request["t"], out idtestata);
        if (idtestata > 0)
        {
            svclayer.OrderFromTemplate(idtestata, descrizione.Text,nome.Text);
        }
    }
    protected void Associa(object sender, GridViewCommandEventArgs e)
    {

        int _id = Convert.ToInt32(e.CommandArgument);
        var _art = svclayer.Articolo(_id);

        Associato myLocatedObject = Associati.Find(delegate(Associato p) { return p.art.id == _id; });
        if (_art != null && myLocatedObject == null)
        {
            Associati.Add(new Associato { art = _art, Qta = 0 });
            gvAssociati.DataSource = Associati.Select(a => new
            {
                id = a.art.id,
                CodArt = a.art.CodArt,
                descrizione = a.art.descrizione,
                PrezzoUnitario = a.art.PrezzoUnitario,
                DescUnitaMisura = a.art.UnitaMisura1.Descrizione,
                Iva = a.art.Iva,
                Qta = a.Qta
            }).ToList();

            gvAssociati.DataBind();
            Session["associatiDettaglio"] = Associati;
        }
    }

    protected void DeAssocia(object sender, GridViewCommandEventArgs e)
    {
        int _id = Convert.ToInt32(e.CommandArgument);
        var _art = svclayer.Articolo(_id);
        Associato myLocatedObject = Associati.Find(delegate(Associato p) { return p.art.id == _id; });
        if (_art != null && myLocatedObject != null)
        {

            //Associati.Remove(art);
            Associati.RemoveAll(x => x.art.id == _art.id);

            Session["associatiDettaglio"] = Associati;
            gvAssociati.DataSource = Associati.Select(a => new
            {
                id = a.art.id,
                CodArt = a.art.CodArt,
                descrizione = a.art.descrizione,
                PrezzoUnitario = a.art.PrezzoUnitario,
                DescUnitaMisura = a.art.UnitaMisura1.Descrizione,
                Iva = a.art.Iva,
                Qta = a.Qta
            }).ToList();
            gvAssociati.DataBind();

        }
    }
}